跳到主要内容

Jenkins 学习使用

Jenkins 是什么?

Jenkins是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。

它的官网地址:https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

Jenkins 具有以下特点:

  • 开源的 Java 语言开发持续集成工具,支持持续集成,持续部署。
  • 易于安装部署配置:可通过 yum 安装,或下载 war 包以及通过 docker 容器等快速实现安装部署,可方便 web 界面配置管理。
  • 消息通知及测试报告:集成 RSS/E-mail 通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知,生成 jUnit/TestNG 测试报告。
  • 分布式构建:支持 Jenkins 能够让多台计算机一起构建/测试。
  • 文件识别:Jenkins 能够跟踪哪次构建生成哪些 jar,哪次构建使用哪个版本的 jar 等。
  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如 git, svn, maven, docker 等。

Jenkins 安装与配置

1、首先,开发人员每天进行代码提交,提交到 Git 仓库

2、然后,Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK,Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。

3、最后,Jenkins 把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。

安装 GitLab

可以使用三种不同版本的 GitLab:社区版(CE),企业版(EE)和GitLab托管的版本。 企业版要钱,所以一般使用的是 CE

CE 版地址

在我们自己安装 GitLab 之前,安装一些在安装过程中持续使用的软件非常重要。

sudo apt update
# 一般都内置
sudo apt install ca-certificates curl openssh-server postfix

至于安装邮件服务,代码审查之类的工具后面再说

首先使用以下 curl 命令将 GitLab 存储库添加到系统源列表中:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

启用存储库后,通过运行以下命令来安装 GitLab 软件包。

# 因为资源服务器在海外,所以得挂代理下载
sudo proxychains apt install gitlab-ce

也可以使用自己下载包手动安装的方式:

# 在线下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
# 安装:
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

注:不过,这个 GitLab 不是强需求,所以这里只做了解,一般企业中才需要使用 GitLab,下面使用 GitHub 来做代码托管

在 IDEA 添加版本控制

提交代码到本地仓库

提交到本地库

添加到远程库

Jenkins 安装

Jenkins 需要依赖 JDK,所以先安装 JDK1.8 再安装一个 Tomcat

# 添加到最后一行
export JAVA_HOME=/home/alsritter/javaTools/jdk1.8.0_121
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=${JAVA_HOME}
export TOMCAT_HOME=/home/alsritter/javaTools/apache-tomcat-7.0.75/

获取 Jenkins 安装包,下载页面:

https://www.jenkins.io/zh/download/
  1. 下载 Jenkins.
  2. 打开终端进入到下载目录.
  3. 运行命令 java -jar jenkins.war --httpPort=8080.
  4. 打开浏览器进入链接 http://localhost:8080
  5. 然后安装界面指引一步步的配置

因为 Jenkins 插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装

选择插件来安装,跳过插件安装

添加一个管理员账户,并进入 Jenkins 后台

更新 Jenkins

注意!!! Jenkins 要安装最新版本(2.282或者更高),不然很多插件安装不了,例如下面的 SSH Credentials,而又一堆插件依赖于这个插件,所以会导致很多插件都安装不了

要更新只需要把下载的jenkins.war 替换原来的jenkins.war 就可以了 那么问题来了? 原来的 jenkins.war 到到底在哪 呀?

systemctl start jenkins
# 或者
java -jar jenkins.war --httpPort=8080

可以发现版本更新了

Jenkins 插件管理

Jenkins 本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从 GitHub 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成。接下来演示如何下载插件。

修改 Jenkins 插件下载地址,因为 Jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:

Jenkins => Manage Jenkins => Manage Plugins,点击 Available

这样做是为了把 Jenkins 官方的插件列表下载到本地,接着修改地址文件,替换为国内插件地址

cd /home/alsritter/.jenkins/updates/
# 找到 default.json 文件
# 替换 updates.jenkins.io/download 为 mirrors.tuna.tsinghua.edu.cn/jenkins
# 替换 www.google.com 为 www.baidu.com

最后,Manage Plugins 点击 Advanced,把 Update Site 改为国内插件下载地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

Sumbit后,在浏览器输入: http://192.168.211.129:8080/restart ,重启Jenkins。

下载中文汉化插件

Jenkins => Manage Jenkins => Manage Plugins,点击 Available,搜索 "Chinese"

安装完插件最好点下面的重启,让插件生效

Jenkins 用户权限管理

可以利用 Role-based Authorization Strategy 插件来管理 Jenkins 用户权限

安装后开启权限全局安全配置

授权策略切换为 "Role-Based Strategy",保存

创建角色

点击 "Manage Roles"

Global roles(全局角色):管理员等高级用户可以创建基于全局的角色 Item roles(项目角色): 针对某个或者某些项目的角色 Node roles(节点角色):节点相关的权限

我们添加以下三个角色:

  • baseRole:该角色为全局角色。这个角色需要绑定 Overall 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
  • role1:该角色为项目角色。使用正则表达式绑定 `"test."`,意思是只能操作 test 开头的项目。*
  • role2:该角色也为项目角色。绑定 `"study."`,意思是只能操作 study 开头的项目。*

保存。

创建用户

在系统管理页面进入 Manage Users

分别创建两个用户:jack 和 eric

给用户分配角色

系统管理页面进入 Manage and Assign Roles,点击 Assign Roles 绑定规则如下:

  • eric 用户分别绑定 baseRole 和 role1 角色
  • jack 用户分别绑定 baseRole 和 role2 角色

记得保存

Jenkins 凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab 密码信息、Docker 私有仓库密码等,以便 Jenkins 可以和这些第三方的应用进行交互。

安装 Credentials Binding 插件

要在 Jenkins 使用凭证管理功能,需要安装 Credentials Binding 插件

安装插件后,左边多了"凭证"菜单,在这里管理所有凭证

可以添加的凭证有5种:

  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

常用的凭证类型有:Username with password(用户密码)和 SSH Username with private key(SSH 密钥)

安装 Git 插件和 Git 工具

Git插件安装:

再在虚拟机安装 Git

sudo apt install git

用户密码类型

1、创建凭证 Jenkins => 凭证 => 系统 => 全局凭证 => 添加凭证

选择 "Username with password",输入 Gitee 的用户名和密码,点击"确定"。

测试凭证是否可用

创建一个 FreeStyle 项目:新建 Item => FreeStyle Project => 确定

找到 "源码管理" => "Git",在 Repository URL 复制 Gitee 中的项目 URL

保存配置后,点击构建 “Build Now” 开始构建项目

查看 ~/.jenkins/workspace/studyjenkins 目录,发现已经从 Gitee 成功拉取了代码到 Jenkins 中。

Maven安装和配置

在 Jenkins 集成服务器上,我们需要安装 Maven 来编译和打包项目。

sudo apt install maven
# 检查 mvn 是否安装好
mvn -v

添加 Jenkins 全局变量

虽然 Maven 有默认配置,但是一些插件无法识别到,所以得手动加几个环境变量

Manage Jenkins => Configure System => Global Properties ,添加三个全局变量 JAVA_HOME、M2_HOME、PATH+EXTRA

注意:可以通过 mvn -v 知道 maven 安装在哪里

配置关联 JDK 和 Maven

Jenkins => Global Tool Configuration => JDK => 新增 JDK

然后下面添加 Maven(去掉自动安装的钩)

测试 Maven 是否配置成功

使用之前的 Gitee 密码测试项目

修改配置

构建 => 增加构建步骤 => Execute Shell

命令里面加上:

mvn clean package

再次构建,如果可以把项目打包,代表 maven 环境配置成功啦!(第一次打包可能比较久)

Jenkins 构建 Maven 项目

Jenkins 构建的项目类型介绍

Jenkins中自动构建项目的类型有很多,常用的有以下三种:

  • 自由风格软件项目(FreeStyle Project)
  • Maven项目(Maven Project)
  • 流水线项目(Pipeline Project)

每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)

自由风格项目构建

下面演示创建一个自由风格项目来完成项目的集成过程:

拉取代码 => 编译 => 打包 => 部署

1、创建项目

2、配置源码管理,从 Gitee 拉取代码

3、编译打包

构建 => 添加构建步骤 => Executor Shell

echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"

Maven 项目构建

这里采用 Maven 文件配置构建

1、安装 Maven Integration 插件

2、创建 Maven 项目

3、配置项目 拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同

这里的没有找到 pom.xml 文件可以不用管,它会自动下载上面填的 Git 远程项目里面的 pom 文件

构建错误的解决方法:

错误1: AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+got+java.awt.headless+problem java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXrender.so.1: cannot open shared object file: No such file or directory

解决:

apt-get install libxrender-dev

错误2: java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory

解决:

apt-get install libxtst-dev